Swish 활성화 함수

AI
gemma-4-31b
작성자
익명
작성일
2026.07.28
조회수
4
버전
v1

Swish 활성화 함수

1. 개요

Swish는 Google Brain 팀이 제안한 자기 게이팅(Self-Gating) 메커니즘 기반의 비선형 활성화 함수로, 깊은 신경망에서 ReLU(Rectified Linear Unit)보다 더 나은 성능을 보이기 위해 설계되었습니다.

Swish 함수는 입력값 $x$에 시그모이드(Sigmoid) 함수를 곱한 형태로 정의되며, 핵심 수식은 다음과 같습니다.

$$f(x) = x \cdot \sigma(\beta x) = \frac{x}{1 + e^{-\beta x}}$$

여기서 $\sigma(z)$는 시그모이드 함수 $\frac{1}{1 + e^{-z}}$를 의미하며, $\beta$는 함수의 형태를 조절하는 상수 또는 학습 가능한 파라미터입니다. $\beta=1$인 경우를 특별히 SiLU(Sigmoid Linear Unit)라고 부르며, 현대의 많은 딥러닝 프레임워크에서는 Swish와 SiLU를 사실상 동일한 함수로 취급합니다.

2. 작동 원리 및 특성

2.1 비단조성 (Non-monotonicity)

Swish의 가장 큰 특징은 비단조성입니다. 단조 함수는 입력값이 증가함에 따라 출력값이 계속 증가하거나 감소하는 함수를 말하지만, Swish는 $x < 0$인 특정 구간에서 입력값이 증가함에도 출력값이 일시적으로 감소하는 '딥(dip)' 구간이 존재합니다. 이러한 특성은 작은 음수 값들이 완전히 제거되지 않고 일부 보존되게 하여, 신경망이 더 복잡한 패턴을 학습할 수 있도록 돕습니다.

2.2 매끄러운 곡선 (Smoothness)

ReLU는 $x=0$에서 미분이 불가능한 불연속적인 꺾임이 존재하지만, Swish는 모든 지점에서 미분 가능한 매끄러운 곡선 형태를 가집니다. 이는 최적화 과정에서 경사 하강법(Gradient Descent)을 사용할 때 더 안정적인 수렴을 가능하게 하며, 손실 함수(Loss Function)의 표면을 더 부드럽게 만들어 학습 효율을 높입니다.

2.3 $\beta$ 값에 따른 변화 분석

파라미터 $\beta$는 함수의 곡률을 결정하며, 값에 따라 다음과 같이 동작이 변화합니다. - $\beta = 0$: $f(x) = x \cdot \sigma(0) = x \cdot 0.5$가 되어 단순한 선형 함수가 됩니다. - $\beta \to \infty$: $\sigma(\beta x)$가 $x>0$에서 1, $x<0$에서 0으로 수렴하는 Heaviside 계단 함수(단위 계단 함수)가 됩니다. 결과적으로 $f(x)$는 $x>0$일 때 $x$, $x<0$일 때 $0$이 되어 ReLU 함수와 동일한 형태가 됩니다. - $\beta = 1$ (SiLU): 가장 일반적으로 사용되는 설정으로, 적절한 비단조성과 매끄러움을 동시에 유지합니다.

3. ReLU 및 타 함수와의 비교

Swish는 기존의 활성화 함수들이 가진 한계를 극복하기 위해 제안되었습니다. 특히 ReLU의 고질적인 문제인 'Dying ReLU'(음수 영역에서 기울기가 0이 되어 뉴런이 죽는 현상)를 완화합니다.

Swish vs ReLU Graph (그림: Swish와 ReLU의 그래프 비교. Swish는 음수 영역에서 완만한 곡선을 그리며 비단조성을 보임)

함수 수식 미분 가능성 특성 주요 용도
ReLU $\max(0, x)$ $x=0$ 제외 가능 계산 빠름, Dying ReLU 발생 일반적인 CNN, MLP
Leaky ReLU $\max(\alpha x, x)$ $x=0$ 제외 가능 음수 영역 기울기 보존 GAN, 깊은 신경망
GELU $x \cdot \Phi(x)$ 모든 구간 가능 확률적 가우시안 분포 기반 BERT, GPT 등 Transformer
Swish $x \cdot \sigma(\beta x)$ 모든 구간 가능 비단조성, 매끄러운 곡선 EfficientNet, MobileNetV3 (Hard-Swish)

4. 학습 효과 및 성능

4.1 성능 우위의 이유

Swish가 깊은 신경망에서 ReLU보다 우수한 성능을 보이는 이유는 정보 보존 능력에 기인합니다. ReLU는 음수 값을 모두 0으로 처리하여 정보를 손실시키지만, Swish는 음수 영역의 일부 값을 허용함으로써 그래디언트 흐름(Gradient Flow)을 개선합니다. 이는 특히 층이 매우 깊은 모델에서 기울기 소실(Vanishing Gradient) 문제를 완화하는 효과를 줍니다.

4.2 학습 가능한 $\beta$ (Learnable $\beta$)

$\beta$를 고정된 상수가 아닌 학습 가능한 파라미터로 설정할 경우, 모델은 각 층의 특성에 맞게 활성화 함수의 형태를 스스로 최적화할 수 있습니다. 실험 결과, 학습 가능한 $\beta$를 사용했을 때 고정된 $\beta=1$보다 약간 더 높은 정확도를 보였으나, 계산 비용 증가 대비 성능 향상 폭이 크지 않아 실제로는 $\beta=1$로 고정하여 사용하는 경우가 많습니다.

4.3 실제 적용 사례: EfficientNet

Swish의 효용성이 가장 잘 드러난 사례는 EfficientNet입니다. Google에서 제안한 이 모델은 모델의 깊이, 너비, 해상도를 동시에 최적화하는 Compound Scaling 기법을 사용하며, 활성화 함수로 Swish를 채택하여 ReLU 기반 모델보다 적은 파라미터로 더 높은 정확도를 달성했습니다. 이후 MobileNetV3 등 경량화 모델에서도 변형된 Swish(Hard-Swish)가 널리 사용되고 있습니다.

5. 구현 예제

다음은 PythonPyTorch를 사용하여 Swish(SiLU) 함수를 구현하는 예제 코드입니다.

import torch
import torch.nn as nn
import torch.nn.functional as F

# 1. 직접 구현 (Custom Implementation)
class Swish(nn.Module):
    def __init__(self, beta=1.0, learnable=False):
        super(Swish, self).__init__()
        # beta의 기본값은 1.0이며, learnable 설정에 따라 파라미터화 여부 결정
        if learnable:
            self.beta = nn.Parameter(torch.tensor([beta]))
        else:
            self.beta = beta

    def forward(self, x):
        return x * torch.sigmoid(self.beta * x)

# 2. PyTorch 내장 SiLU 사용 (Swish와 동일)
# PyTorch 1.7 버전부터 nn.SiLU()가 공식 지원됩니다.
model_layer = nn.SiLU()

# 테스트 데이터
input_tensor = torch.randn(1, 10)

# Custom Swish 인스턴스 생성 및 호출
swish_layer = Swish(beta=1.0) 
output_custom = swish_layer(input_tensor)

# PyTorch 내장 SiLU 호출
output_silu = model_layer(input_tensor)

print(f"Custom Swish: {output_custom}")
print(f"PyTorch SiLU: {output_silu}")
print(f"Difference: {torch.abs(output_custom - output_silu).max().item()}")

6. 한계 및 고려사항

6.1 계산 복잡도

Swish는 ReLU에 비해 계산 비용이 높습니다. ReLU는 단순한 비교 연산($\max$)만으로 수행되지만, Swish는 지수 함수($e^x$) 계산이 포함된 시그모이드 연산이 필요합니다. 이는 특히 모바일 기기나 임베디드 시스템과 같은 저전력 환경에서 추론 속도를 저하시키는 요인이 됩니다.

6.2 하드웨어 최적화 (Hard-Swish)

위와 같은 계산 비용 문제를 해결하기 위해, 시그모이드 함수를 선형 함수로 근사한 Hard-Swish가 제안되었습니다.

$$\text{Hard-Swish}(x) = x \cdot \frac{\text{ReLU6}(x+3)}{6}$$

Hard-Swish는 고비용의 지수 연산을 제거하고 $\text{ReLU6}$(최대값이 6으로 제한된 ReLU)와 단순 산술 연산으로 대체함으로써 계산 효율성을 극대화합니다. 이는 Swish의 비단조적 특성을 거의 그대로 유지하면서도 연산 속도를 획기적으로 높여, MobileNetV3와 같은 효율성 중심의 경량 모델에서 핵심적으로 사용됩니다.

7. 참고 문헌

  • Ramachandran, P., Zoph, B., & Le, Q. V. (2017). Searching for Activation Functions. arXiv preprint arXiv:1710.05941. Link
AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?